/*
 * pannel.h
 *
 *  Created on: May 18, 2021
 *      Author: soliber
 *      说明：	操作面板API
 *      		操作面板包括1块OLED显示屏、红色指示灯、绿色指示灯、确认按钮、旋转编码器
 *
 */

#ifndef BSP_PANNEL_PANNEL_H_
#define BSP_PANNEL_PANNEL_H_

#include "main.h"
#include "tim.h"

/*---------------------LED宏定义和类型-----------------------*/
//LED接线和选择
#define LED_PORT	(LEDG_GPIO_Port)	//所有LED使用了同一个端口
#define LED_GREEN	(LEDG_Pin)
#define LED_RED		(LEDR_Pin)
#define LED_ALL		(LED_GREEN+LED_RED)
//LED状态枚举
typedef enum
{
	LED_ON = GPIO_PIN_RESET,	//点亮：低电平
	LED_OFF = GPIO_PIN_SET		//熄灭：高电平
}LED_Status_Typedef;
//LED宏函数
//设置LED
#define HAL_LED_SET(ledx,status)		HAL_GPIO_WritePin(LED_PORT,ledx,status)
//翻转LED
#define HAL_LED_TOGGLE(ledx)			HAL_GPIO_TogglePin(LED_PORT,ledx)
//读取LED
#define HAL_LED_READ(ledx)				((LED_Status_Typedef)HAL_GPIO_ReadPin(LED_PORT,ledx))
//熄灭LED
#define HAL_LED_OFF(ledx)				HAL_LED_SET(ledx,LED_OFF)
//点亮LED
#define HAL_LED_ON(ledx)				HAL_LED_SET(ledx,LED_ON)


/*---------------------按钮宏定义和类型-----------------------*/
//按钮接线
#define BUTTON_PORT			(OK_GPIO_Port)	//所有按钮使用了同一个端口
#define BUTTON_OK			(OK_Pin)
#define BUTTON_S			(ENC_S_Pin)
//按钮宏函数
//清按钮事件
#define HAL_BUTTON_CLEAR(button)		__HAL_GPIO_EXTI_CLEAR_FLAG(button)
//按钮按下
#define HAL_BUTTON_PRESSED(button)		(__HAL_GPIO_EXTI_GET_FLAG(button))
//等按钮按下(可以接循环体)
#define HAL_BUTTON_WAIT(button)			while(!HAL_BUTTON_PRESSED(button))

/*---------------------编码器宏定义和类型-----------------------*/
#define htimx							htim3
#define HAL_ENCODER_GET()				(htimx.Instance->CNT>>1)
#define HAL_ENCODER_SET(x)				(htimx.Instance->CNT = ((x)<<1))


/*---------------------API声明-----------------------*/

/*
 * 函数名：	HAL_Pannel_Init
 *
 * 说明：	初始化操作面板
 * 			所有指示灯点亮1s后熄灭，
 * 			OLED显示主页，按下按键后进入主菜单，
 * 			主页中，可以实时显示编码器的值及编码器按键状态
 *
 * 参数：	无
 *
 * 返回值：	无
 */
void HAL_Pannel_Init(void);


// TODO OLED显示屏的操作待确定


#endif /* BSP_PANNEL_PANNEL_H_ */
